#pragma once
#ifndef _BASE_H_
#define _BASE_H_

#include <iostream>

class Base
{
public:
	Base();
	virtual ~Base();
	//~Base();

public:
	virtual void foo_1() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
	virtual void foo_2() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
	void foo_3() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
};

class Derive_1 : public Base
{
public:
	virtual ~Derive_1();

public:
	virtual void foo_1() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
	virtual void doo_1() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
};

class Derive_2 : public Base
{
public:
	virtual ~Derive_2();

public:
	virtual void foo_1() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
	void doo_2() { std::cout << __FUNCTION__ << "---> be called!" << std::endl; }
};

#endif	// _BASE_H_

